#include "stdafx.h"
/// Copyright 2012, Alex Averian, Yonan Research
/// Released under BSD Licence

#include "qapp.h"
using namespace micro::app;


QApp::QApp()
{
    m_hInstance = GetModuleHandle( 0 );


    srand( ( unsigned )time( nullptr ) );


}


QApp::~QApp( void )
{


}

int QApp::MessageLoop()
{
    MSG msg;
    BOOL bRet;


    while (  bRet = GetMessage( &msg, 0, 0, 0 )   )
    {
        if ( bRet == -1 )
        {
            // handle the error and possibly exit
            break;
        }
        else
        {
            if ( !PreTranslateMessage( &msg )  )
            {
                TranslateMessage( &msg );
                DispatchMessage( &msg );
            }
        }

    }

    return 0;
}


int QApp::Run()
{

    try
    {


        if ( InitInstance() )
        {
            // Dispatch the window messages
            MessageLoop();
        }
        else
        {
            ::PostQuitMessage( -1 );
            return -1;
        }


        CloseInstance();
    }
    catch ( QError & e )
    {
        e.PrintMessage();
        return 0; // returning FALSE ends the application
    }
    catch ( ... )
    {
        QError e;
        e.PrintMessage();
        return 0;
    }



    return 0;

}




//{
//bool done = false;
//while (!done)
//{
/* Wait for either an APC or a message. */
//nu suporta fire...


//while (WAIT_IO_COMPLETION ==
//        MsgWaitForMultipleObjectsEx(0, nullptr, INFINITE, QS_ALLINPUT | QS_ALLEVENTS , MWMO_ALERTABLE))
/* Do nothing */;




/* One or more messages have arrived. */
//	while (PeekMessage(&msg, nullptr, 0, 0, PM_REMOVE)) //trebuie MsgWait altfel incinge procesorul
//	{
//		if (msg.message == WM_QUIT)
//		{
//			done = true;
//			break;
//		}




//		//!IsDialogMessage(msg.hwnd, &msg )  ||

//		if(  ! GetMainFrame()->TranslateAccelerator(&msg)  )
//		{

//			TranslateMessage(&msg);
//			DispatchMessage(&msg);
//
//		}
//	}
//}
//return (int) msg.wParam;
//}

//
//int QApp::Run()
//{
//
//	try	{
//
//
//			if (InitInstance())
//			{
//				// Dispatch the window messages
//				MessageLoop();
//			}
//			else
//			{
//				::PostQuitMessage(-1);
//				return -1;
//			}
//
//
//			CloseInstance();
//		}
//		catch (...)
//		{
//			QError e;
//			e.PrintMessage();
//		}
//
//
//
//	return 0;
//
//}
//


